package cn.icatw.gulimall.order.service;

import cn.icatw.common.to.mq.SeckillOrderTo;
import cn.icatw.gulimall.order.vo.*;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.icatw.common.utils.PageUtils;
import cn.icatw.gulimall.order.entity.OrderEntity;

import java.util.Map;
import java.util.concurrent.ExecutionException;

/**
 * 订单
 *
 * @author icatw
 * @email 762188827@qq.com
 * @date 2022-02-21 20:53:00
 */
public interface OrderService extends IService<OrderEntity> {

    /**
     * 查询页面
     *
     * @param params 参数个数
     * @return {@link PageUtils}
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 确认订单
     * 确认订单，返回订单确认页需要的数据
     *
     * @return {@link OrderConfirmVo}
     * @throws ExecutionException   执行异常
     * @throws InterruptedException 中断异常
     */
    OrderConfirmVo confirmOrder() throws ExecutionException, InterruptedException;

    /**
     * 提交订单
     *
     * @param vo 签证官
     * @return {@link SubmitOrderResponseVo}
     */
    SubmitOrderResponseVo submitOrder(OrderSubmitVo vo);

    /**
     * 根据订单号获取订单
     *
     * @param orderSn 订单sn
     * @return {@link OrderEntity}
     */
    OrderEntity getOrderByOrderSn(String orderSn);

    /**
     * 关闭订单 mq发送消息
     *
     * @param entity 实体
     */
    void closeOrder(OrderEntity entity);

    /**
     * 得到订单支付
     *
     * @param orderSn 订单sn
     * @return {@link PayVo}
     */
    PayVo getOrderPay(String orderSn);

    /**
     * 查询订单详情页面
     *
     * @param params 参数个数
     * @return {@link PageUtils}
     */
    PageUtils queryPageWithItem(Map<String, Object> params);

    /**
     * 处理支付结果
     *
     * @param vo 签证官
     * @return {@link String}
     */
    String handlePayResult(PayAsyncVo vo);

    /**
     * 创建秒杀订单
     *
     * @param orderTo 以
     */
    void createSeckillOrder(SeckillOrderTo orderTo);
}

